package com.adminsystem.controller;


import cn.hutool.core.codec.Base64Encoder;
import com.adminsystem.common.constant.WebCaptch;
import com.adminsystem.common.utils.RedisUtil;
//import com.adminsystem.entity.custom.R;
import com.ruoyi.common.core.redis.RedisCache;
import com.system.core.http.R;
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.base.Captcha;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * 验证码Controller控制器
 */
@RestController
@Api(tags = "验证码")
@Slf4j
public class CaptchaController {

    String key = UUID.randomUUID().toString(); // 生成随机唯一key

    @Autowired
    private RedisUtil redisUtil;

    @GetMapping("/captcha")
    public R captcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        response.setHeader("Cache-Control", "no-store");
//        response.setHeader("Pragma", "no-cache");
//        response.setDateHeader("Expires", 0);
//        response.setContentType("image/gif");
        /*
         验证码类型
         * SpecCaptcha（PNG类型的静态图片验证码）
         * GifCaptcha（Gif类型的图片验证码）
         * ChineseCaptcha（GIF类型中文图片验证码）
         * ArithmeticCaptcha（算术类型的图片验证码）
         */
        // 3个参数分别为验证码的长宽高
        SpecCaptcha captcha = new SpecCaptcha(140, 47, 4);
        /*
        验证码字符类型
         *TYPE_DEFAULT：数字和字母混合
         *TYPEONLYNUMBER：纯数字
         *TYPEONLYCHAR：纯字母
         *TYPEONLYUPPER：纯大写字母
         *TYPEONLYLOWER：纯小写字母
         *TYPENUMAND_UPPER：数字和大写字母混合
         */
        captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
        // 设置字体大小
        captcha.setCharType(Captcha.FONT_9);


        redisUtil.set(key,captcha.text().toLowerCase(), 120);

        // 输出图片流
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        captcha.out(byteArrayOutputStream);
        String str = "data:image/jpeg;base64,";
        String base64Img = str + Base64Encoder.encode(byteArrayOutputStream.toByteArray());
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("captchaImg", base64Img);
        resultMap.put("uuid", key);
        return R.success(resultMap);

    }

}
